package cn.edu.tjnu.db;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class DBProvider {

	/**
	 * 通过id主键值获取实体对象
	 * 
	 * @param id
	 *            主键
	 * @param clazz
	 *            加载的类的Class对象
	 * @param isLazy
	 *            是否进行延迟加载:true-延迟加载；false-非延迟加载
	 * @return 结果对象
	 */
	public Object getBeanById(int id, Class clazz, boolean isLazy) {
		Object obj = null;
		// 获取session对象
		Session session = DBFactory.getDBDriverInstance().getSession();

		// 延迟加载
		if (isLazy) {
			obj = session.load(clazz, id);
		} else {
			// 费延迟加载
			obj = session.get(clazz, id);
		}
		/*
		 * 此处没有关闭session，是因为查询结果对象还在使用中。也就是说，
		 * 在使用查结果之前，不能关闭session对象，只有在不使用查询结果之后才能关闭session对象。
		 * 该种情况的解决方式：可以将session对象委托给spring框架进行管理（需要集成spring框架）
		 */
		//session.close();
		return obj;
	}

	/**
	 * 保存或新增实体对象信息
	 * 
	 * @param obj
	 *            被保存的实体对象
	 */
	public void saveOrUpdate(Object obj) {
		// 3、打开sesion对象
		Session session = DBFactory.getDBDriverInstance().getSession();
		// 4、开始事务
		Transaction ts = session.beginTransaction();
		//////////////////////////////////
		// 5、进行数据库操作

		// 保存Bean数据信息

		// 使用hibernate保存实体对象的数据
		session.saveOrUpdate(obj);

		System.out.println("empB的数据保存完成。。。");
		//////////////////////////////////
		// 6、提交事务
		ts.commit();
		// 7、 关闭session
		session.close();
	}
}
